IniAddLine Subroutine

private subroutine IniAddLine(aInLine, iniDB)

add a new Key-Val pair

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: aInLine
type(IniList), intent(out) :: iniDB

Variables

Type Visibility Attributes Name Initial
integer(kind=long), public :: commentPos
integer(kind=long), public :: eqPos
character(len=stringLen), public :: inLine
integer(kind=long), public :: lastPos
character(len=stringLen), public :: s

Source Code

SUBROUTINE IniAddLine &
!
( aInLine, iniDB )

IMPLICIT NONE
! subroutine arguments 
! Scalar arguments with intent(in):
CHARACTER (LEN=*), INTENT(in) :: aInLine

! Array arguments with intent(out):
TYPE (IniList), INTENT(OUT) :: iniDB

!Local scalar:
INTEGER (KIND = long) :: eqPos, commentPos, lastPos
CHARACTER (LEN = stringLen ) :: s, inLine

!------------end of declaration------------------------------------------------ 

!change tabs to spaces 
inLine = TabToSpace (aInLine)

!remove trailing spaces
inLine = TRIM ( ADJUSTL ( InLine ) )


!search for section or subsection

IF ( inLine(1:1) == '[' .AND. inLine(2:2) /= '[' ) THEN
	IF (inSection) THEN
		iniDB % sectionEnd(iniDB % nOfSections) = numKeys
		inSection = .TRUE.
	ENDIF
	IF (inSubSection) THEN
		iniDB % subSectionEnd(iniDB % nOfSubSections) = numKeys
		inSubSection = .FALSE.
	ENDIF
	inSection = .TRUE.
	iniDB % nOfSections = iniDB % nOfSections + 1
	iniDB % sectionName(iniDB % nOfSections) = &
	      inLine (2 : SCAN (inLine, ']') - 1)
	iniDB % sectionBegin(iniDB % nOfSections) = numKeys + 1  
	
ENDIF

IF ( inLine(1:2) == '[[' ) THEN
	IF (inSubSection) THEN
		iniDB % subSectionEnd(iniDB % nOfSubSections) = numKeys
		inSubSection = .FALSE.
	ENDIF
	inSubSection = .TRUE.
	iniDB % nOfSubSections = iniDB % nOfSubSections + 1
	iniDB % subSectionName(iniDB % nOfSubSections) = &
	      inLine (3 : SCAN (inLine, ']') - 1)
	iniDB % subSectionBegin(iniDB % nOfSubSections) = numKeys + 1

ENDIF

commentPos = SCAN(inLine,'#')
IF (commentPos /= 0) THEN
   inLine = inLine (1 : commentPos - 1)
END IF
eqPos = SCAN ( inLine , '=' )

IF ( eqPos /= 0 .AND. inLine(1:1) /= '#' ) THEN
   
	numKeys = numKeys + 1      
  
	iniDB % keys(numKeys) = TRIM(inLine(1 : eqPos - 1))
	s = ADJUSTL(inLine(eqPos + 1:)) 
	commentPos = SCAN(s,'#')
	IF (commentPos /= 0) THEN
		s  = s (1 : commentPos - 1)
	END IF
	lastPos = LEN_TRIM(s)
	IF (lastPos > 1) THEN
		IF ( s ( 1 : 1 ) == '''' .AND. s ( lastPos : lastPos ) == '''') THEN
			s = s ( 2 : lastPos - 1 )
		END IF
	END IF
	iniDB % vals(numKeys) = TRIM(s)  
END IF

END SUBROUTINE IniAddLine